home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / python-support / python-gmenu / GMenuSimpleEditor / maindialog.py < prev    next >
Encoding:
Python Source  |  2009-03-17  |  5.7 KB  |  156 lines

  1. #
  2. # Copyright (C) 2005 Red Hat, Inc.
  3. #
  4. # This program is free software; you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation; either version 2 of the License, or
  7. # (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. # GNU General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU General Public License
  15. # along with this program; if not, write to the Free Software
  16. # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17. #
  18.  
  19. import os.path
  20. import gtk
  21. import gtk.glade
  22. import gmenu
  23.  
  24. from config import *
  25.  
  26. import menutreemodel
  27. import menufilewriter
  28.  
  29. class MenuEditorDialog:
  30.     def __init__ (self, menu_files):
  31.         glade_file = os.path.join (GLADEDIR, "gmenu-simple-editor.glade")
  32.         self.xml = gtk.glade.XML (glade_file, "menu_editor_dialog", PACKAGE)
  33.  
  34.         self.window = self.xml.get_widget ("menu_editor_dialog")
  35.         self.window.connect ("destroy", gtk.main_quit)
  36.         self.window.set_default_response (gtk.RESPONSE_ACCEPT)
  37.         self.window.set_icon_name ("gnome-main-menu")
  38.  
  39.         self.help_button = self.xml.get_widget ("help_button")
  40.         self.help_button.set_sensitive (False)
  41.  
  42.         self.menus_tree   = self.xml.get_widget ("menus_treeview")
  43.         self.entries_list = self.xml.get_widget ("applications_treeview")
  44.  
  45.         self.menu_tree_model = menutreemodel.MenuTreeModel (menu_files)
  46.         
  47.         self.menu_file_writer = menufilewriter.MenuFileWriter (self.menu_tree_model)
  48.  
  49.         self.current_iter = None
  50.         self.current_path = None
  51.  
  52.         self.__setup_menus_tree ()
  53.         self.__setup_entries_list ()
  54.  
  55.         self.window.connect ("response", self.__dialog_response)
  56.         self.window.set_default_size (580, 435)
  57.         self.window.show ()
  58.  
  59.     def __revert_to_system_default (self, parent_iter = None):
  60.         model = self.menu_tree_model
  61.         
  62.         iter = model.iter_children (parent_iter)
  63.         while iter:
  64.             if model[iter][model.COLUMN_IS_ENTRY]:
  65.                 model[iter][model.COLUMN_USER_VISIBLE] = model[iter][model.COLUMN_SYSTEM_VISIBLE]
  66.             else:
  67.                 self.__revert_to_system_default (iter)
  68.             
  69.             iter = model.iter_next (iter)
  70.  
  71.     def __dialog_response (self, dialog, response_id):
  72.         if response_id == gtk.RESPONSE_REJECT:
  73.             self.__revert_to_system_default ()
  74.             iter = self.menu_tree_model.get_iter_first ()
  75.             while iter:
  76.                 self.menu_file_writer.queue_sync (iter)
  77.                 iter = self.menu_tree_model.iter_next (iter)
  78.             return
  79.         
  80.         dialog.destroy ()
  81.  
  82.     def __is_menu_tree_directory (self, model, iter):
  83.         return not model[iter][self.menu_tree_model.COLUMN_IS_ENTRY]
  84.  
  85.     def __setup_menus_tree (self):
  86.         self.menus_model = self.menu_tree_model.filter_new ()
  87.         self.menus_model.set_visible_func (self.__is_menu_tree_directory)
  88.         self.menus_tree.set_model (self.menus_model)
  89.         
  90.         self.menus_tree.get_selection ().set_mode (gtk.SELECTION_BROWSE)
  91.         self.menus_tree.get_selection ().connect ("changed", self.__menus_selection_changed)
  92.         self.menus_tree.set_headers_visible (False)
  93.  
  94.         column = gtk.TreeViewColumn (_("Name"))
  95.         column.set_spacing (6)
  96.  
  97.         cell = gtk.CellRendererPixbuf ()
  98.         column.pack_start (cell, False)
  99.         column.set_attributes (cell, pixbuf = self.menu_tree_model.COLUMN_ICON)
  100.  
  101.         cell = gtk.CellRendererText ()
  102.         column.pack_start (cell, True)
  103.         column.set_attributes (cell, text = self.menu_tree_model.COLUMN_NAME)
  104.                                 
  105.         self.menus_tree.append_column (column)
  106.  
  107.         self.menus_tree.expand_all ()
  108.  
  109.     def __setup_entries_list (self):
  110.         self.entries_list.get_selection ().set_mode (gtk.SELECTION_SINGLE)
  111.         self.entries_list.set_headers_visible (True)
  112.  
  113.         column = gtk.TreeViewColumn (_("Show"))
  114.         self.entries_list.append_column (column)
  115.         
  116.         cell = gtk.CellRendererToggle ()
  117.         cell.connect ("toggled", self.__on_hide_toggled)
  118.         column.pack_start (cell, False)
  119.         column.set_attributes (cell, active = self.menu_tree_model.COLUMN_USER_VISIBLE)
  120.  
  121.         column = gtk.TreeViewColumn (_("Name"))
  122.         column.set_spacing (6)
  123.         self.entries_list.append_column (column)
  124.  
  125.         cell = gtk.CellRendererPixbuf ()
  126.         column.pack_start (cell, False)
  127.         column.set_attributes (cell, pixbuf = self.menu_tree_model.COLUMN_ICON)
  128.  
  129.         cell = gtk.CellRendererText ()
  130.         column.pack_start (cell, True)
  131.         column.set_attributes (cell, text = self.menu_tree_model.COLUMN_NAME)
  132.  
  133.     def __on_hide_toggled (self, toggle, path):
  134.         def toggle_value (model, iter, column):
  135.             model[iter][column] = not model[iter][column]
  136.  
  137.         child_path = self.entries_model.convert_path_to_child_path (path)
  138.         child_iter = self.menu_tree_model.get_iter (child_path)
  139.         
  140.         toggle_value (self.menu_tree_model, child_iter, self.menu_tree_model.COLUMN_USER_VISIBLE)
  141.  
  142.         self.menu_file_writer.queue_sync (child_iter)
  143.  
  144.     def __menus_selection_changed (self, selection):
  145.         (model, iter) = selection.get_selected ()
  146.         if not iter:
  147.             self.entries_list.set_model (None)
  148.             return
  149.  
  150.         if iter:
  151.             iter = model.convert_iter_to_child_iter (iter)
  152.         
  153.         self.entries_model = self.menu_tree_model.filter_new (self.menu_tree_model.get_path (iter))
  154.         self.entries_model.set_visible_column (self.menu_tree_model.COLUMN_IS_ENTRY)
  155.         self.entries_list.set_model (self.entries_model)
  156.